<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 通过连接另一个数组的子数组得到一个数组 -->
    <script>
      var canChoose = function (groups, nums) {
        // 添加前缀逗号, 来避免类似 [[2, 1]] [12, 1] 这样的字符串匹配出现true
        // 但是实际上应该是false的
        let s = ',' + nums.join()
        for (let g of groups) {
          // 子数组合并成子字符串的时候, 也要加上一个前缀逗号
          // 这样 ,2,1 != ,12,1
          // 保证查询子字符串的时候, 不会造成 2,1 包含于 12,1这样的误判
          let index = s.indexOf(',' + g.join())
          if (index < 0) return false
          // 此处的 +1, 就是上面子字符串前缀添加逗号产生的额外长度
          s = s.slice(index + g.join().length + 1)
        }
        return true
      }
      console.log(
        canChoose(
          [
            [1, -1, -1],
            [3, -2, 0]
          ],
          [1, -1, 0, 1, -1, -1, 3, -2, 0]
        )
      )
    </script>
  </body>
</html>
